import com.beans.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2023/4/3 19:12
 *
 * ApplicationContext 和 BeanFactory的区别
 *  1.继承关系： ApplicationContext属于 BeanFactory 的⼦类，
 *  它除了继承了 BeanFactory 的所有功能之外，它还拥有独特的特性，
 * 还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
 *  2.性能⽅⾯来说：ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象， 饿汉
 *  ⽽BeanFactory 是需要那个才去加载那个，因此更加轻量。 懒汉
 *
 */
public class App {
    public static void main(String[] args) {
        //1.通过ApplicationContext 获得
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.获得bean
        User user = (User) applicationContext.getBean("user");
        //3.使用
        user.sayHi();
//        加载了 User...
//        加载了 Article...
//        Hello Spring~~~


        //1.通过BeanFactory 获得
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        //2.获得bean
        User user1 = (User) beanFactory.getBean("user");
        //3.使用
        user1.sayHi();
//        加载了 User...
//        Hello Spring~~~
    }
}
